package com.zqq.demo.utils;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


/**
 * description：文件操作工具
 * project name: ProjectMaster
 * author: Drink1993
 * version 1.0
 * create at:  2017/8/17 15:45
 * change at:
 * change describe:
 * change version:
 */

public class FileUtils {
    /**
     * 向文件里写入字节流byte[]数组
     *
     * @param path 待写入的文件路径
     * @param date 待写入的文件数据
     * @return 写入byte[]data数据的文件
     */
    public static synchronized File writeFile(String path, byte[] date) {
        File file = createFile(path);
        try {
            FileOutputStream out = new FileOutputStream(file,true);
            BufferedOutputStream bos = new BufferedOutputStream(out);
            bos.write(date, 0, date.length);
            bos.flush();
            bos.close();
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return file;
    }

    /**
     * 文件字节流转化为byte数组
     *
     * @param path 文件路径
     * @return byte数组
     */
    public static synchronized byte[] readFile(String path) {
        byte[] data = null;
        File file = new File(path);
        try {
            FileInputStream is = new FileInputStream(file);
            BufferedInputStream bis = new BufferedInputStream(is);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] temp = new byte[1024];
            int len = 0;
            while ((len = bis.read(temp)) != -1) {
                byteArrayOutputStream.write(temp, 0, len);
            }
            byteArrayOutputStream.flush();
            is.close();
            bis.close();
            byteArrayOutputStream.close();
            data = byteArrayOutputStream.toByteArray();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return data;
    }

    /**
     * 标准创建文件
     *
     * @param path 文件路径
     */
    public static synchronized File createFile(String path) {
        File file = new File(path);
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return file;


    }
//
//    /**
//     * 先删除文件在再创建文件
//     *
//     * @param path 文件路径
//     */
//    public static synchronized File deleteAndCreateFile(String path) {
//        File file = new File(path);
//        if (file.exists()) {
//            file.delete();
//        }
//        if (!file.getParentFile().exists()) {
//            file.getParentFile().mkdirs();
//        }
//        if (!file.exists()) {
//            try {
//                file.createNewFile();
//            } catch (IOException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            }
//        }
//        return file;
//
//
//    }
//
//    /**
//     * 标准创建文件
//     *
//     * @param path 文件路径
//     */
//    public static synchronized File createInnerStorageFile(Context context, String path) {
//
//        File file = new File(path);
//        if (file.exists()) {
//            delete(file);
//        }
//        if (!file.getParentFile().exists()) {
//            file.getParentFile().mkdirs();
//        }
//        if (!file.exists()) {
//            try {
//                file.createNewFile();
//            } catch (IOException e) {
//                // TODO Auto-generated catch block
//                e.printStackTrace();
//            }
//        }
//        return file;
//
//
//    }
//
//
//    /**
//     * 把orig源文件内容写入目标文件dest文件中
//     *
//     * @param orig 源文件
//     * @param dest 目标文件
//     */
//
//    public static synchronized void write2File(File orig, File dest) {
//        try {
//            FileInputStream in = new FileInputStream(orig);
//            BufferedInputStream bis = new BufferedInputStream(in);
//            FileOutputStream out = new FileOutputStream(dest);
//            BufferedOutputStream bos = new BufferedOutputStream(out);
//            byte[] better = new byte[1024];
//            int len;
//            while ((len = bis.read(better)) != -1) {
//                bos.write(better, 0, len);
//            }
//            bos.flush();
//            in.close();
//            bis.close();
//            out.close();
//            bos.close();
//
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//
//    }
//
//    /**
//     * 向目标文件file中写入byte数组
//     *
//     * @param file 目标文件
//     * @param date byte数组数据
//     */
//
//    public static synchronized void write2File(File file, byte[] date) {
//        if (!file.exists()) {
//            return;
//        }
//        try {
//            FileOutputStream out = new FileOutputStream(file);
//            BufferedOutputStream bos = new BufferedOutputStream(out);
//            bos.write(date, 0, date.length);
//            bos.flush();
//            bos.close();
//            out.close();
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//
//    }
//
//
//    /**
//     * description : 保存图片到文件,耗时操作请在子线程中执行
//     * <p>
//     * param filePath文件路径
//     * mBitmap 图片
//     * ImageName 文件名字
//     * <p>
//     * return 成功返回true 失败返回false,检查sd卡
//     * author Drink1993
//     * created at 2017/8/17 17:03
//     * version 1.0
//     */
//
//    public static synchronized Boolean setPicToFile(String filePath, Bitmap mBitmap,
//                                                    String ImageName) {
//        String sdStatus = Environment.getExternalStorageState();
//        // sd是否可用
//        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
//            return false;
//        }
//        File file = new File(filePath, ImageName);
//        //文件输出流
//        FileOutputStream b = null;
//        if (!file.exists()) {
//            file.mkdirs();
//        }
//
//        if (file.exists()) {
//            file.delete();
//        }
//        try {
//            b = new FileOutputStream(file);
//            // 把数据写入文件
//            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);
//            b.flush();
//            b.close();
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return true;
//
//    }
//
//    /**
//     * description :  删除文件或文件夹
//     * param  file
//     * return 文件或文件夹不存在,返回false.
//     * author Drink1993
//     * created at 2017/8/17 17:11
//     * version 1.0
//     */
//    public static Boolean delete(File file) {
//        if (!file.isFile() && !file.isDirectory()) {
//
//            return false;
//        }
//
//        if (file.isFile()) {
//
//            file.delete();
//
//            return true;
//
//        }
//
//
//        if (file.isDirectory()) {
//
//            File[] childFiles = file.listFiles();
//
//            if (childFiles == null || childFiles.length == 0) {
//
//                file.delete();
//
//                return true;
//
//            }
//
//
//            for (int i = 0; i < childFiles.length; i++) {
//
//                delete(childFiles[i]);
//
//            }
//
//            file.delete();
//
//        }
//        return true;
//
//    }
//
//    /**
//     * 获取SD卡剩余容量（单位Byte）
//     *
//     * @return
//     */
//    @SuppressWarnings("deprecation")
//    public static long gainSDFreeSize() {
//        String sdStatus = Environment.getExternalStorageState();
//        // sd是否可用
//        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
//            return 0;
//        } else {
//            // 取得SD卡文件路径
//            File path = Environment.getExternalStorageDirectory();
//            StatFs sf = new StatFs(path.getPath());
//            // 获取单个数据块的大小(Byte)
//            long blockSize = sf.getBlockSize();
//            // 空闲的数据块的数量
//            long freeBlocks = sf.getAvailableBlocks();
//
//            // 返回SD卡空闲大小
//            return freeBlocks * blockSize; // 单位Byte
//        }
//
//    }
//
//    /**
//     * 获取SD卡总容量（单位Byte）
//     *
//     * @return
//     */
//    @SuppressWarnings("deprecation")
//    public static long gainSDAllSize() {
//        String sdStatus = Environment.getExternalStorageState();
//        // sd是否可用
//        if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
//            return 0;
//        } else {
//            // 取得SD卡文件路径
//            File path = Environment.getExternalStorageDirectory();
//            StatFs sf = new StatFs(path.getPath());
//            // 获取单个数据块的大小(Byte)
//            long blockSize = sf.getBlockSize();
//            // 获取所有数据块数
//            long allBlocks = sf.getBlockCount();
//            // 返回SD卡大小（Byte）
//            return allBlocks * blockSize;
//        }
//    }


}
